我有一个带有ActionListener的JRadioButton,但我不知道如何在点击另一个面板时触发JButton的图标更改。下面列出了两者的代码。选择正确的单选按钮后,图像需要从左键切换到右键。
package gui;
public class ExampleGUI extends JFrame {
private static final long serialVersionUID = 1L;
private JPanel contentPane;
ImageIcon icon = new ImageIcon(ExampleGUI.class
.getResource("/gui/schlange1.gif"));
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
ExampleGUI frame = new ExampleGUI();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public ExampleGUI() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout(0, 5));
setContentPane(contentPane);
JLabel lblExampleGui = new JLabel("Example GUI");
lblExampleGui.setFont(new Font("Tahoma", Font.PLAIN, 18));
lblExampleGui.setHorizontalAlignment(SwingConstants.CENTER);
contentPane.add(lblExampleGui, BorderLayout.NORTH);
JPanel radioButtonPanel = new JPanel();
contentPane.add(radioButtonPanel, BorderLayout.SOUTH);
JPanel imagePanelBoxes = mainImagePanel();
contentPane.add(imagePanelBoxes, BorderLayout.CENTER);
JButton leftImage = leftClickImage();
imagePanelBoxes.add(leftImage);
JButton rightImage = rightClickImage();
imagePanelBoxes.add(rightImage);
JRadioButton leftRadioButton = leftRadioButton();
radioButtonPanel.add(leftRadioButton);
JRadioButton rightRadioButton = rightRadioButton();
radioButtonPanel.add(rightRadioButton);
ButtonGroup group = new ButtonGroup();
group.add(leftRadioButton);
group.add(rightRadioButton);
}
private JPanel mainImagePanel() {
JPanel imagesPanel = new JPanel();
imagesPanel.setBorder(new EmptyBorder(0, 5, 0, 5));
imagesPanel.setLayout(new GridLayout(0, 2, 10, 0));
return imagesPanel;
}
private JRadioButton leftRadioButton() {
final JRadioButton leftRadioButton = new JRadioButton("LEFT");
leftRadioButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
changeIcon(leftClickImage(), icon);
}
});
leftRadioButton.setSelected(true);
return leftRadioButton;
}
private JRadioButton rightRadioButton() {
final JRadioButton rightRadioButton = new JRadioButton("RIGHT");
rightRadioButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
changeIcon(rightClickImage(), icon);
}
});
rightRadioButton.isSelected();
return rightRadioButton;
}
private JButton leftClickImage() {
JButton leftImage = new JButton("");
leftImage.setIcon(new ImageIcon(ExampleGUI.class
.getResource("/gui/schlange1.gif")));
leftImage.setBackground(Color.BLACK);
return leftImage;
}
private JButton rightClickImage() {
final JButton rightImage = new JButton("");
rightImage.setBackground(Color.BLACK);
return rightImage;
}
public void changeIcon(JButton jb, ImageIcon icon) {
jb.setIcon(icon);
}
}
您可以提供按钮,将其更改为JRadioButton-creator的参数,但这看起来非常不可读且设计不佳
private JRadioButton leftRadioButton(JButton affectedButton) {
JRadioButton leftRadioButton = new JRadioButton("LEFT");
leftRadioButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
if (leftRadioButton.isSelected())
affectedButton=rightRadioButton();
else
affectedButton=leftRadioButton();
}
});
leftRadioButton.setSelected(true);
return leftRadioButton;
}
我宁愿不使用actionListener的内联deffinition,而是在您的框架(或您使用的其他类)中实现它来访问该类中使用的按钮和标签等。如果您没有太多项目要听,它会变得更具可读性。
public class buttonchanger extends JFrame implements ActionListener{
JPanel radioButtonPanel;
JPanel imagePanelBoxes;
JButton leftImage;
JButton rightImage;
JRadioButton leftRadioButton;
JRadioButton rightRadioButton;
public initGUI() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout(0, 5));
setContentPane(contentPane);
JLabel lblExampleGui = new JLabel("Example GUI");
lblExampleGui.setFont(new Font("Tahoma", Font.PLAIN, 18));
lblExampleGui.setHorizontalAlignment(SwingConstants.CENTER);
contentPane.add(lblExampleGui, BorderLayout.NORTH);
JPanel radioButtonPanel = new JPanel();
contentPane.add(radioButtonPanel, BorderLayout.SOUTH);
JPanel imagePanelBoxes = mainImagePanel();
contentPane.add(imagePanelBoxes, BorderLayout.CENTER);
JButton leftImage = leftClickImage();
imagePanelBoxes.add(leftImage);
JButton rightImage = rightClickImage();
imagePanelBoxes.add(rightImage);
JRadioButton leftRadioButton = leftRadioButton();
leftRadioButton.addActionListener(this);
radioButtonPanel.add(leftRadioButton);
JRadioButton rightRadioButton = rightRadioButton();
rightRadioButton.addActionListener(this);
radioButtonPanel.add(rightRadioButton);
ButtonGroup group = new ButtonGroup();
group.add(leftRadioButton);
group.add(rightRadioButton);
}
public void ActionListener(ActionEvent actE){
Object obj=actE.getSource();
if (obj==leftRadioButton){
leftImage.setIcon(yourIcon);
//or do whatever you intend to do
}
}
}
希望这是您所寻求的更多解决方案。我仍然不知道radioButton事件发生后,什么按钮应该更改为什么状态
就这么简单
yourJButton.setIcon(yourIconToSet);
这应该是从单选按钮上的action listener调用的ofc
leftRadioButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
// ? <- here invoke code to change your button's label
}
});
public class SwitchButton {
public static void main(String [] args){
SwitchButton sb = new SwitchButton();
}
JFrame jfButtons = new JFrame();
JPanel jpButtons = new JPanel();
JRadioButton jrb = new JRadioButton("if you click me");
JButton jb = new JButton("I'll change");
public SwitchButton(){
jrb.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
changeColor(jb, Color.blue);
}
});
jpButtons.add(jrb);
jpButtons.add(jb);
jfButtons.add(jpButtons);
jfButtons.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
jfButtons.setVisible(true);
jfButtons.pack();
}
public void changeColor(JButton jbtn, Color color){
jbtn.setBackground(color);
}
}
这基本上就是你想要做的。您只需将changeColor()更改为changeIcon()
每次用户在ChartJS中选择新的图表类型时,我都试图确定重新加载画布的正确方法,但现在不会更改图表类型: chartJs.js index.html
我的GUI有一个从db文件筛选出的条目列表。对于每个条目,我都有一个selectjbutton,它显示每个条目的更多细节。 我试图实现的是让selectjbutton在按下时更改颜色,并在选择其他条目的按钮时恢复为原始颜色。 我目前拥有的代码将很好地更改所选颜色的按钮,但在选择其他条目的“详细信息”按钮时仍保持相同的颜色: 如何更改代码以获得此效果?
我又有一个问题,关于在netbean中使用数据库程序。这是我的问题,我有一个包含男性和女性按钮的按钮组。当你点击“提交”按钮时,选中的按钮将把它的文本写入MySQL数据库。所以问题是,我不知道它的反面。 我将使我的问题尽可能清楚。我想从数据库中检索文本,并在按钮组的一个按钮中选择检索到的文本。 例如,我从数据库中检索了“男性”,所以我想要一个代码来选择“男性”单选按钮。谢谢。 编辑: 所以我现在明
问题内容: 在对话框中,如果选中了某个组合,则需要显示一组控件,否则显示另一组控件。即我需要2层,并且当组合被选中/未选中时,我需要在它们之间切换。我怎样才能做到这一点? 问题答案: CardLayout 为此,如下所示。
我有一个java应用程序-一个计算器。我想通过调整应用程序窗口的大小来动态调整按钮的字体大小。如何实现? 我的想法是使用ComponentEvents。我有应用程序窗口的初始大小和初始字体的大小。我想根据按钮的大小改变字体大小,受窗口大小变化的影响。问题是如何在覆盖方法中使用比例[初始窗口大小]/[初始字体大小]?每个字体的比例都不同。
我在看这个和这个线索,虽然我的问题没有那么不同,但有一些不同。我有一个满是