我有简单的Swing GUI与主窗口JFrame,其主面板派生自JPanel.该面板有一些按钮,可以单击并生成事件.
我希望这些事件影响存储的数据,JFrame因为它是我的主应用程序 - 它有一些线程,开放流等队列.
那么如何让我的按钮在面板中调用其父框架中的回调?Java/Swing的最佳实践是什么?
如何设置JButton的颜色?
我试过这个:
button.setBackground(Color.red);
Run Code Online (Sandbox Code Playgroud)
但没有成功.这只会改变按钮边框的颜色.然后我试图覆盖paintComponents
public void paintComponent(Graphics g) {
g.setColor(Color.GREEN);
g.fillRect(0, 0, getSize().width, getSize().height);
}
Run Code Online (Sandbox Code Playgroud)
但是现在我没有看到JButton上的文字
这一直困扰着我.如果我在定义之前setText在JButton上定义,文本将消失:setAction
JButton test = new JButton();
test.setText("test"); // Before - disappears!
test.setAction(new AbstractAction() {
public void actionPerformed(ActionEvent e) {
// do something
}
});
this.add(test);
Run Code Online (Sandbox Code Playgroud)
如果它之后,没有问题.
JButton test = new JButton();
test.setAction(new AbstractAction() {
public void actionPerformed(ActionEvent e) {
// do something
}
});
test.setText("test"); // After - no problem!
this.add(test);
Run Code Online (Sandbox Code Playgroud)
此外,如果我在JButton构造函数中设置文本,那很好!Yarghh!
为什么会这样?
我正在读一本名为Swing:A Beginner's guide的好书.书中有这样的代码,它创建了一个按钮和一个标签,用于警告按钮的状态变化事件:
//Demonstrate a change listener and the button model
package swingexample2_6;
import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;
public class ChangeDemo {
JButton jbtn;
JLabel jlab;
public ChangeDemo() {
//Create a new JFrame container
JFrame jfrm = new JFrame("Button Change Events");
//Specify FlowLayout for the layout manager
jfrm.getContentPane().setLayout(new FlowLayout());
//Give the frame an initial size
jfrm.setSize(250, 160);
//Terminate the program when the user closes the application
jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Create an empty label
jlab = new JLabel();
//Make a button
jbtn …Run Code Online (Sandbox Code Playgroud) 我是一名初学者,正在构建一个带按钮和滚动条的简单窗口.当我编译我的代码时,我的按钮上的文字被删除了一个省略号,图像图标没有显示.我试过在eclipse和NetBeans中编译它.为了解决我试过的问题
.setMargin(new Insets(0, 0, 0, 0));
.setPreferedSize
adding padding (I forgot the code for this)
.setBounds
Run Code Online (Sandbox Code Playgroud)
以及我在互联网上偶然发现的其他一切.这些都没有解决我的问题,我无法查看按钮中的文本和图像.
我的代码:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class FeedBar2 extends JFrame {
public FeedBar2() {
super("FeedBar 2");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// create icons
ImageIcon loadIcon = new ImageIcon("load.gif");
ImageIcon saveIcon = new ImageIcon("save.gif");
ImageIcon subscribeIcon = new ImageIcon("subscribe.gif");
ImageIcon unsubscribeIcon = new ImageIcon("unsubscribe.gif");
// create buttons
JButton load = new JButton("Load", loadIcon);
JButton save = new JButton("Save", saveIcon);
JButton subscribe = new JButton("Subscribe", subscribeIcon); …Run Code Online (Sandbox Code Playgroud) Icon icon = new ImageIcon(getClass().getResource( "/img/icon.gif" ) );
aButton = new JButton("Its a button", icon);
Run Code Online (Sandbox Code Playgroud)
是否有某种方法可以阻止动画播放?我正在考虑分配gif的静态jpg,然后当我悬停时,分配动画gif,但我不认为有一个事件可以取消鼠标,MouseMotionListener所以我可以加载静态jpg.
按钮中的gif循环,但是,如果我将鼠标悬停在按钮上,它就会消失.
如果我的鼠标光标不在按钮上,如何使gif静态?
如果我使用MouseMotionListener,如果我取下鼠标,它是否会触发事件?
@Override
public void mouseMoved(MouseEvent e) {
//play the gif
//if I take mouse off, call some method to stop playing animated gif
}
@Override
public void mouseDragged(MouseEvent e) {
}
Run Code Online (Sandbox Code Playgroud) 我试图自动增加/减少JButton文本的字体大小(如果JButton增加/延伸其文本也将增加,如果JButton减少其文本也将减少).JButtons的默认字体是Sans-Serif大小为20,它永远不会减少到20以下(它可以是21,30,40或任何高于或等于20但不低于20的任何东西).我有一个名为MenuJPanel的JPanel,它使用GridLayout添加5个JButton,随着JPanel的增加/减少,这将增加/减少.我选择了GridLayout,因为它似乎是为此目的的最佳布局,我错了吗?我还在MenuJPanel中添加了一个componentResized.下面你可以看到我的代码部分工作.

public class MenuJPanel extends JPanel {
private JButton resizeBtn1;
private JButton resizeBtn2;
private JButton resizeBtn3;
private JButton resizeBtn4;
private JButton resizeBtn5;
public MenuJPanel() {
initComponents();
this.addComponentListener(new ComponentAdapter() {
@Override
public void componentResized(ComponentEvent e) {
Font btnFont = resizeBtn1.getFont();
String btnText = resizeBtn1.getText();
int stringWidth = resizeBtn1.getFontMetrics(btnFont).stringWidth(btnText);
int componentWidth = resizeBtn1.getWidth();
// Find out how much the font can grow in width.
double widthRatio = (double) componentWidth / (double) stringWidth;
int newFontSize = (int) (btnFont.getSize() * widthRatio);
int componentHeight = …Run Code Online (Sandbox Code Playgroud) 我想添加ActionListener一组按钮.是否有任何类包裹按钮?喜欢GroupJButtons什么东西或更普遍的东西?所以我可以设置ActionListener所有这些.毕竟我并不关心按哪个按钮我只想更改他的文本所以我需要做的就是将它转换为JButton更改文本.
整个过程会减少1或2中的代码行(如果你使用循环)但我想这样做,因为它听起来逻辑上更好.
我想动态添加按钮数组.我试过这样的:
this.pack();
Panel panel = new Panel();
panel.setLayout(new FlowLayout());
this.add(panel);
panel.setVisible(true);
for (int i = 0; i < Setting.length; i++) {
for (int j = 0; j < Setting.width; j++) {
JButton b = new JButton(i+"");
b.setSize(30, 30);
b.setLocation(i * 30, j * 30);
panel.add(b);
b.setVisible(true);
}
}
Run Code Online (Sandbox Code Playgroud)
但没有得到任何东西,我犯了什么错误?
我有jFrame类"选择",我有一个按钮,当我按下按钮时,这应该发生:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
structure.Setting s = new Setting(8, 8, 3, 1, 1);
Game g = new …Run Code Online (Sandbox Code Playgroud) 有没有办法设置JButton组件的默认光标?
这是如何设置一个光标JButton:
JButton btn = new JButton("Click me");
btn.setCursor(new Cursor(Cursor.HAND_CURSOR));
Run Code Online (Sandbox Code Playgroud)
根据lookAndFeel Nimbus的默认值,没有像" Button.cursor " 这样的属性.
我想设置一次默认光标,这样当鼠标光标移动时,应用程序中的所有JButton都有相同的手形光标.
java ×10
jbutton ×10
swing ×10
jpanel ×2
action ×1
animated-gif ×1
arrays ×1
grid-layout ×1
imageicon ×1
jframe ×1
jscrollpane ×1
text ×1