下面是在特定pannel3上以gridlayout形式创建9个按钮的代码.我想要的是使每个按钮的背景为黑色,上面有灰色文字.有人可以帮忙吗?
for(int i=1;i<=9;i++)
{
p3.add(new JButton(""+i));
}
Run Code Online (Sandbox Code Playgroud) 我希望根据鼠标事件(鼠标进入,退出,按下等)获得自定义颜色.所以要做到这一点,我写了下面的代码.它对一切都很好,除了鼠标按下事件的情况,什么都不做.它只有当我覆盖在色彩的作品UIManager是这样UIManager.put("Button.select", Color.red);.问题UIManager是,它会改变我的所有按钮.
任何人都可以告诉我,我可能做错了什么,或者最好的方法是什么,我想要做什么?
我的代码:
final JButton btnSave = new JButton("Save");
btnSave.setForeground(new Color(0, 135, 200).brighter());
btnSave.setHorizontalTextPosition(SwingConstants.CENTER);
btnSave.setBorder(null);
btnSave.setBackground(new Color(3, 59, 90));
btnSave.addMouseListener(new MouseListener() {
@Override
public void mouseReleased(MouseEvent e) {
btnSave.setBackground(new Color(3, 59, 90));
}
@Override
public void mousePressed(MouseEvent e) {
// Not working :(
btnSave.setBackground(Color.pink);
}
@Override
public void mouseExited(MouseEvent e) {
btnSave.setBackground(new Color(3, 59, 90));
}
@Override
public void mouseEntered(MouseEvent e) {
btnSave.setBackground(new Color(3, 59, 90).brighter());
}
@Override
public void mouseClicked(MouseEvent e) { …Run Code Online (Sandbox Code Playgroud) JRE版本1.7更新3
预期的行为
当我运行该程序时,它按预期工作,一切顺利.当我点击STOP JButton动画停止并且同一文本JButton改变为START.现在当我点击时BALL COLOUR JButton,BALL变化的颜色以及变化的颜色BALL COLOUR JBUTTON也会变化BALL.如果我按原样运行我的应用程序而不调整大小,则整个行为都有效.
意外行为
但当RESIZE我JFrame通过拉动时Right Side,那就是当我的应用程序的意外行为被显示时,在某种意义上说,如果我按下STOP JButton然后单击BALL COLOUR按钮,JButton之前单击的文本更改为的文本START将STOP在不应该更改时再次更改为当它应该改变为球的颜色时,以及BALL COLOUR JButton将保持不变或将转向BLUE的颜色.我附上照片了解更多信息.但是如果你试图将它重新调整到原来的大小或更接近它,那么事情就会恢复正常.为什么会这样?任何想法或线索将非常感激.
正如我的应用程序运行如上所述的预期行为:

这里是意想不到的行为

底线:
为什么应用程序像往常一样运行BEGINNING,而不是RESIZED通过拖动它RIGHT SIDE,但是如果你把它带到它的原始大小或更接近它,事情恢复正常,它按预期工作?
所以考虑到这个场景,我在程序中做错了什么.或者这正是我应该使用的情况SwingWorker,或者这是一个问题Layout,或隐藏的相关内容Content Pane.请放轻装:-)
这是我正在使用的代码,我把它降到最低限度,因为我想要证明我的问题:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class …Run Code Online (Sandbox Code Playgroud) 我试图以JToggleButton可靠,外观和感觉独立的方式改变它的颜色.
如果使用Metal L&F,那么使用UIManager是一种方法:
UIManager.put("ToggleButton.selected", Color.RED);
Run Code Online (Sandbox Code Playgroud)
注意:Iyy指出我上面的属性名称中有一个拼写错误,但我会将其留在上面,以便人们到达这里,但实际的属性名称应该是:
UIManager.put("ToggleButton.select", Color.RED);
Run Code Online (Sandbox Code Playgroud)
但是,这在我目前的外观(目前是Windows XP)中不起作用.经过一些进一步的分析,似乎Windows中的系统外观(仍然是XP)根本不使用任何Color基于UIManager属性的属性ToggleButton,或者它至少不提供它们本身(有一个在线快速查找的UIManager例子)来自的所有属性键,在示例中明确地明确限制Color属性).
我试过设置背景颜色:
Action action = new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) { /* stuff */ }
};
JToggleButton button = new JToggleButton(action);
// tried with and without opaque true
button.setOpaque(true);
button.setBackground(Color.RED);
Run Code Online (Sandbox Code Playgroud)
它不仅不会改变选定的状态,而且甚至不会影响未选择的状态.
我在尝试接收动作后尝试更改背景颜色:
@Override
public void actionPerformed(ActionEvent e)
{
JToggleButton button = (JToggleButton)e.getSource();
if (button.isSelected()) // alternatively, (Boolean)getValue(Action.SELECTED_KEY)
{
button.setBackground(Color.RED);
}
}
Run Code Online (Sandbox Code Playgroud)
这些都不起作用.我发现工作的唯一要求是我自己在选定状态下绘制按钮(这导致一个工作示例,虽然看起来非标准): …
我有chart.png,其中有数据,我想用一些标签放一个简单的X - Y轴.我也想尝试不使用任何没有java附带的外部软件.我被允许使用jfreechart但是如果有一种方法可以让它看起来不错,而只是使用一些计划java代码,那会更好.有没有人对如何做这类事情有个好主意?
更新:这样的东西,但数据将用rgb值进行颜色编码,当然没有轴/标签.
pyplot延迟示例http://www.goldb.org/goldblog/cmg_images/pylot_latency_sample.png
这个图只是一个例子,它看起来与我的实际图形看起来一样......我的真实图形中可以包含每个rgb颜色值.我知道如何创建情节,我只是不知道如何将轴/标签放在BufferImage我创建的那个上
Java/Eclipse IDE在这里.
我有一个JFrame设置为大小为NxN的GridLayout.用户将N作为程序开头的命令行给出.NxN模式的JButtons被添加到JPanels的窗口中,由GridLayout设置在位置(我认为).
每个JButton都需要自己的JPanel来使用GridLayout吗?我的印象是你可以为所有按钮设置一个JPanel,并将JPanel设置为JButtons的GridLayout.我想在按钮数组的左侧添加另一个JPanel,以显示按钮单击(JLabel)和同一左侧JPanel内的重置按钮.
这是(一点点)我的代码,其中N由用户给出,system是我的后台进程类,ButtonEvent是ActionListener/actionPerformed的类:
JFrame window = new JFrame("");
GridLayout layout = new GridLayout(N,N);
window.setLayout(layout);
for (int row = 0; row < N; row++){
for (int col = 0; col < N; col++){
JPanel panel = new JPanel();
JButton b = new JButton ("("+row+","+col+")");
window.add(b).setLocation(row, col);
panel.add(b);
b.addActionListener(new ButtonEvent(b, system, row, col));
window.add(panel);
}
}
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.pack();
window.setVisible(true);
Run Code Online (Sandbox Code Playgroud)
这就是我所拥有的(N = 4):
这是(大约)我正在寻找的(N = 4):
我需要/想要的只是两个(或更多)JPanels,大致如上所述,我尝试过的所有布局管理器都不适合GridLayout布局JFrame.
欢迎提出有关更好解决方案的任何建议.
谢谢!
我试图在文本字段中闪烁背景颜色.我的计时器设置如下:
Flash flash = new Flash(); //set up timer
tmr = new javax.swing.Timer(1000, new Flash());
tmr.addActionListener(flash);
tmr.setInitialDelay(0);
tmr.setRepeats(true);
tmr.start();
Run Code Online (Sandbox Code Playgroud)
我的actionListener如下:
static class Flash implements ActionListener
{
public void actionPerformed(ActionEvent evt)
{
if (flasher)
{
SpreademPanel.historyPnl.NameTxt.setBackground(Color.white);
}
else
{
SpreademPanel.historyPnl.NameTxt.setBackground(Color.pink);
}
flasher = !flasher;
} //actionPerformed
} //Flash
Run Code Online (Sandbox Code Playgroud)
现在,当我把它放在调试中并按照动作执行时,程序会反复执行闪存并在两个备选项之间切换.但是在屏幕上,只有第一个切换发生.之后,没有动作,虽然闪光灯仍在运转.
这有什么不对?
在此先感谢您的帮助.
我正在尝试创建一个 JDialog,就像 Microsoft Word 中的“符号”对话框一样,您可以通过从“插入”菜单中选择“符号...”来获得该对话框。基本上,它是一个n x m(n和m直到运行时才知道)的小按钮网格。我已经有了一个使用 GridLayout 很好地工作的第一个版本。问题是,当您调整对话框大小时(并且要求您应该能够调整它的大小),按钮的大小会发生变化。我需要按钮的大小保持不变。
但我希望包含按钮的网格的尺寸发生变化。例如,如果对话框变宽,但高度保持不变,则行数应减少,而列数应增加。
我想了几种方法来解决这个问题:
解决这个布局问题的最佳方法是什么?
下面的代码是在选择3个按钮中的任何一个时更改背景颜色:红色,绿色或蓝色.当我选择其中任何一个时,实际上什么也没发生.但是,从JButtons更改为JRadioButtons或JToggleButtons确实有效.谁知道为什么?是因为JButton.isselected()方法被窃听并且它总是返回false?我感谢任何帮助......谢谢.
public class bgcolor2 extends JFrame
{
private static final int FRAME_WIDTH = 300;
private static final int FRAME_HEIGHT= 400;
private ActionListener listener;
private JButton greenbutton;
private JButton redbutton;
private JButton bluebutton;
private JPanel colorpanel;
private JPanel buttonpanel;
public bgcolor2()
{
colorpanel = new JPanel();
add(colorpanel,BorderLayout.CENTER);
class bgcolorlistener implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
changebgcolor();
}
}
listener=new bgcolorlistener();
createbuttons();
setSize(FRAME_WIDTH,FRAME_HEIGHT);
}
public void createbuttons()
{
greenbutton = new JButton("Green");
greenbutton.addActionListener(listener);
bluebutton = new JButton("Blue");
bluebutton.addActionListener(listener);
redbutton = …Run Code Online (Sandbox Code Playgroud) 
基本上,我该如何生成这个?我很确定这是一份工作GridBagLayout,但我无法理解如何正确调整'动作窗格'与'菜单栏'的大小.红色和黑色线条表示我相信您将在这种情况下使用的网格(3x3),但我可能完全错误,并且可能有一种方法可以在不同的配置中执行此操作.我试图勾搭的weightx,weighty,gridheight,gridwidth价值观GridBagConstraints,但我不能在这里实现我的目标.
请注意,第二条红线应该恰好是框架下半部分高度的三分之一.
这是我最近的尝试,尝试使用3x6网格(c是GridBagConstraints对象,characterPortraits包含所有肖像,currentScreen是'Action Pane'):
c.fill = GridBagConstraints.BOTH;
c.weightx = 0.25;
c.weighty = (1/6);
c.gridx = 0;
c.gridy = 0;
c.gridheight = 3;
pane.add(characterPortraits.get(0), c);
c.gridx = 2;
pane.add(characterPortraits.get(1), c);
c.gridx = 0;
c.gridy = 3;
c.gridheight = 3;
pane.add(characterPortraits.get(2), c);
c.gridx = 2;
pane.add(characterPortraits.get(3), c);
//c.fill = GridBagConstraints.NONE;
c.weightx = 1.0;
c.weighty = 1.0;
c.gridx = 1;
c.gridy = 0;
c.gridheight = 3;
pane.add(currentScreen, c);
Run Code Online (Sandbox Code Playgroud)
相反,这会在其象限的底部三分之一处生成每个肖像,而动作窗格占据中心列的5/6而不是4/6,就像我想要的那样.任何想法都会有所帮助 谢谢!-B.
编辑:我正在设计此应用程序以具有固定的窗口大小; …
java ×10
swing ×10
jbutton ×4
axis-labels ×1
eclipse ×1
flowlayout ×1
grid-layout ×1
jframe ×1
jfreechart ×1
layout ×1
mouseevent ×1
png ×1
resize ×1
selection ×1
uimanager ×1