我不确定如何修复程序中的错误,以及如何突出显示用户悬停的选项。我希望它突出显示每个位置的代码,即位置1将被突出显示(作为不同的颜色)开始游戏,等等,上/下会改变位置,我会用上,下,左,好的。这是我到目前为止所拥有的。目前它被窃听了,当用我的窗口编译时,它出来了:
哪个适用于主游戏,哪个适用于这个标题栏,我做错了什么,我该如何修复它?
标题板类
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.util.ArrayList;
//sound + file opening
import java.io.*;
import javax.sound.sampled.*;
public class TitleBoard extends JPanel implements ActionListener{
private ArrayList<String> OptionList;
private Image background;
private ImageIcon bgImageIcon;
private String cheatString;
private int position;
private Timer timer;
public TitleBoard(){
setFocusable(true);
addKeyListener(new TAdapter());
bgImageIcon = new ImageIcon("");
background = bgImageIcon.getImage();
String[] options = {"Start Game","Options","Quit"};
OptionList = new ArrayList<String>();
optionSetup(options);
position = 1;
timer = new Timer(8, this);
timer.start();
/*
1 mod 3 =>1 highlight on start
2 mod 3 =>2 highlight on options
3 mod 3 =>0 highlight on quit
*/
try{
Font numFont = Font.createFont(Font.TRUETYPE_FONT,new File("TwistedStallions.ttf"));
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
ge.registerFont(numFont);
setFont(numFont.deriveFont(24f)); //adjusthislater
}catch(IOException|FontFormatException e){
e.printStackTrace();
}
}
private void optionSetup(String[] s){
for(int i=0; i<s.length;i++) {
OptionList.add(s[i]);
}
}
public void paint(Graphics g){
super.paint(g);
Graphics g2d = (Graphics2D)g;
g2d.drawImage(background,0,0,this);
for (int i=0;i<OptionList.size();i++){
g2d.drawString(OptionList.get(i),200,120+120*i);
}/*
g2d.drawString(OptionList.get(1),400,240);
g2d.drawString(OptionList.get(2),400,360);
//instructions on start screen maybe??
//800x500
//highlighting*/
Toolkit.getDefaultToolkit().sync();
g.dispose();
}
public void actionPerformed(ActionEvent e){
repaint();
}
public class TAdapter extends KeyAdapter {
public void keyPressed(KeyEvent e){
if(e.getKeyCode() == KeyEvent.VK_UP||
e.getKeyCode() == KeyEvent.VK_RIGHT){
position++;
}
if(e.getKeyCode() == KeyEvent.VK_DOWN||
e.getKeyCode() == KeyEvent.VK_LEFT){
position--;
}
}
}
}
窗口类
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Window extends JFrame{
public Window(){
int width = 800, height = 600;
//TO DO: make a panel in TITLE MODE
///////////////////////////////////
//panel in GAME MODE.
add(new TitleBoard());
//set default close
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(width,height);
//centers window
setLocationRelativeTo(null);
setTitle("Title");
setResizable(false);
setVisible(true);
}
public static void main(String[] args){
new Window();
}
}
2条答案
按热度按时间plicqrtu1#
有许多方法可以实现这一点,例如,可以使用某种委托模型。
也就是说,您可以设计一个委托,提供一个简单的接口方法,paint方法将调用该方法,并且它知道如何执行其余操作,而不是尝试在单个方法(或多个方法)中管理每个元素。
例如,Swing将这种概念用于
JList
、JTable
和JTree
的单元格呈现器。比如说...
从这里,您可以添加
ActionListener
l0oc07j22#
当一个GUI需要一个按钮时,使用
JButton
!JButton
API允许为许多不同的情况添加图标。这个例子显示了标准图标、悬停图标和按下图标的不同图标。你的GUI显然会使用带有文本的图标来达到所需的效果。这些图标是从Example images for code and mark-up Q&As直接(热链接)提取的。
标准
悬停在三角形上
按下三角形
编号