如何在运行时调整JButton的大小以使其适应由给定的文本setSize?我做了一些搜索,这是我到目前为止提出的代码.这会变成一种实用方法吗?
FontMetrics metrics = getFontMetrics( font );
int width = metrics.stringWidth( string );
Run Code Online (Sandbox Code Playgroud)
PS:没有使用布局管理器.
我希望能够在一个带有JButton的单元格中有一个JPanel,它在单击时可以完成一些工作.
我找了关于Cell Editors的howtos,但所有的例子都谈到用另一个组件替换单元格(例如用JTextField替换int等)我的情况有点不同:
我有以下ADT
class MyClass {
public String title;
public String url;
public String path;
public int annotations;
}
Run Code Online (Sandbox Code Playgroud)
我创建了一个自定义表格单元格模型,该模型有1列,该列的类是MyClass.然后我为该类创建了一个单元格渲染器,它返回一个JPanel,如下所示:

如您所见,JPanel包含一个按钮.我希望这个按钮在点击时启动JFrame.有任何想法吗?
如果您建议Cell Editor,请更具体地说明如何操作.如果可能,请提供一些伪代码.
谢谢.
PS我很确定这个问题的标题需要一些工作.;)
我们的一位客户在我们的申请中报告了一个例外.问题是,我完全无法理解如何重现这个bug.
这是代码:
btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
popup.show(btn, 3, btn.getHeight());
}
});
Run Code Online (Sandbox Code Playgroud)
备注:
btn是类型的最终局部变量JButton.popup是类型的最终局部变量JPopupMenu.抛出以下异常:
java.awt.IllegalComponentStateException: component must be showing on the screen to determine its location
at java.awt.Component.getLocationOnScreen_NoTreeLock(Unknown Source)
at java.awt.Component.getLocationOnScreen(Unknown Source)
at javax.swing.JPopupMenu.show(Unknown Source)
at fr.def.iss.vd2.mod_site_watcher_gui.SiteElementPanel$4.actionPerformed(SiteElementPanel.java:117)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.focusLost(Unknown Source)
at java.awt.Component.processFocusEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at …Run Code Online (Sandbox Code Playgroud) 是否可以在Swing中将Button叠加在Label上?
例如,如果有一个带有图像的JLabel而没有文本,我想在我的JLabel上覆盖我的按钮.标签定义如下:
myLabel = new javax.swing.JLabel(new ImageIcon( myPicture ));
Run Code Online (Sandbox Code Playgroud)
如果没有,那么任何想法我怎么能意识到这一点,谢谢.
编辑:其实我读到有关添加JPanel到JLabel,当我添加一个面板按钮布局,它编译得很好,但没有任何可见,只是JLabel与图像
更新:正如@ paranoid-android所建议的那样,我已经解决了我的问题.然而,我仍然必须知道如何自定义覆盖在JLabel顶部的组件的位置,因为我没有太多的控制(可能因为通常我使用netbeans绘制布局,这将需要硬编码).
像这样的东西有效:
ImagePanel(Image image, int id) {
this.image = image;
this.tile = false;
JButton backButton = new JButton();
JButton nextButton = new JButton();
backButton.setText(" BACK ");
nextButton.setText(" NEXT ");
add(backButton);
add(nextButton);
};
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(image, 0, 0, getWidth(), getHeight(), this);
}
Run Code Online (Sandbox Code Playgroud) 我需要制作一个由交替的黑色和白色JButton组成的棋盘,它们正对着另一个.我可以使用图形类添加按钮吗?我很感激帮助不回答,因为这是家庭作业.
我有类似下面的代码:
for(int i=0;i<10;i++){
button=new JButton(buttons[i]);
button.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
setPage(i);
}
});
menu.add(button);
}
Run Code Online (Sandbox Code Playgroud)
但是,该变量i未在ActionListener类的范围内定义.我怎样才能传递变量?
我正在Netbeans 7.1中构建一个GUI,它代表了医院设备项目的输液泵.按jButton1应显示某个jLabel,表示输液正在运行.再次按jButton1应该停止它.我唯一的问题是按钮需要在第一次工作之前点击两次.在那之后,它完全符合我希望它的工作方式.我在这个问题上搜索了多个线程,但其他解决方案似乎不起作用.谁能帮我?提前致谢!
package infusion;
public class Infusion {
static Interface screen;
public Infusion(){
screen = new Interface();
screen.setVisible(true);
screen.jLabel3.setVisible(true);
screen.jButton1.setVisible(true);
}
public static void main(String[] args) {
// TODO code application logic here
Infusion infusion = new Infusion();
}
}
Run Code Online (Sandbox Code Playgroud)
这是用户界面的代码(主要由Netbeans生成).jButton1ActionPerformed的实现是我调整过的唯一代码.
package infusion;
public class Interface extends javax.swing.JFrame {
boolean pump1Running = false;
/**
* Creates new form Interface
*/
public Interface() {
initComponents();
}
/**
* This method is called from within the constructor to initialize the form.
* …Run Code Online (Sandbox Code Playgroud) 我有一个JButton我想扩展以填补JPanel持有它的大小.我尝试过几种不同的方式,没有运气.以下是一些尝试:
这里推荐的手动尺寸设置- 按钮尺寸没有变化.
panel = new JPanel(new CardLayout());
button = new JButton();
button.setPreferredSize(new Dimension(BUTTON_SIZE, BUTTON_SIZE));
panel.add(button);
Run Code Online (Sandbox Code Playgroud)试图用一个BorderLayout如在暗示扩大按钮在这里.尺寸没有变化.
panel = new JPanel(new BorderLayout());
button = new JButton();
panel.add(button, BorderLayout.CENTER);
Run Code Online (Sandbox Code Playgroud)我可能做错了什么,所以非常感谢任何帮助.
编辑
以下是解决问题的摘要.有两件事有效
new JPanel),根据Oracle默认为BorderLayout.new BorderLayout(0,0)).我正在尝试创建一个小的GUI,它有2个JButton和2个JPanel,每个都有一些绘图动画.默认情况下,它必须显示第一个JPanel,并通过单击第二个JButton我想看到我的第二个JPanel.所以:我创建了JFrame,Panel1和Panel2,在那里我绘制了我的动画,创建了Button1和Button2并添加了ActionListeners.我还有MainPanel,它有一个字段变量i.通过更改此"i"我的构造函数将MainPanel添加到Panel1(默认)或Panel2(通过单击JButton2我更改i).比我把这个MainPanel添加到我的框架.所以我的问题:在类MainPanel中我有refreshMe方法,我应该在那里写什么才能使我的GUI正常工作?谢谢.这是我的代码:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class GuiTest {
public static void main(String[] args) {
JFrame f = new JFrame();
MainPanel myPanel = new MainPanel();
f.add(myPanel);
Button1 button1 = new Button1();
Button2 button2 = new Button2();
myPanel.add(button1);
myPanel.add(button2);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.pack();
f.setVisible(true);
}
}
class MainPanel extends JPanel {
Panel1 p1 = new Panel1();
Panel2 p2 = new Panel2();
public int i = 1; //this is being changed later by clicking …Run Code Online (Sandbox Code Playgroud) 我正在为一个项目做一台老虎机.我无法让我JButton从我的生成新的随机数ArrayList.我可以在程序启动和actionlistener设置时随机化数字,但它不能满足我的需要.它仅用于测试目的.
我Actionlistener在一个不同的Java文件中.一切正常,我只是无法弄清楚如何在占位符产生新的随机量plc1,plc2以及plc3按钮被按下时.
我刚刚开始在3周前开始编码.请不要讨厌,这是我的第一个项目.
package GGCGuiLotto;
import java.util.ArrayList;
import java.awt.Color;
import java.awt.Image;
import java.awt.BorderLayout;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Icon;
import javax.swing.JOptionPane;
import javax.swing.JLabel;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JTextField;
import java.util.Random;
public class GGCGuiLotto {
public static void main(String[] args) {
//Arraylist of images
ImageIcon pic0 = new ImageIcon("pics/pic1.png");
ImageIcon pic1 = new ImageIcon("pics/pic2.png");
ImageIcon pic2 = new ImageIcon("pics/pic3.png");
ImageIcon …Run Code Online (Sandbox Code Playgroud)