在a中使用时Windows 7 JToolBar,JToggleButton有时会截断其标签文本.
请参阅下面的代码中的示例.以大写字母开头的切换按钮'W'将被截断; 一个以空格(或甚至是小写'w')开头的人不会.
这只发生在Windows?有人可以解释为什么会这样吗?
// http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6386636
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JFrame;
import javax.swing.JToggleButton;
import javax.swing.JToolBar;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
/////////////////////// new class
public class Truncation_Example extends JToolBar {
private static final long serialVersionUID = 1L;
/////////////////////// object attributes
JToggleButton toggle_Good;
JToggleButton toggle_Bad;
/////////////////////// constructors
public Truncation_Example() {
toggle_Good = new JToggleButton(new Action_Good());
toggle_Bad = new JToggleButton(new Action_Bad());
this.add(toggle_Good);
this.add(toggle_Bad);
}
/////////////////////// …Run Code Online (Sandbox Code Playgroud) 可能重复:
setMaximumSize在java中不起作用
我的JFrame子类遇到了问题.我需要设置最大高度.
但是setMaximumSize不起作用.这似乎是java中的一个错误(setMinimumSize工作).如何防止a JFrame高于给定高度?
我得到一个JFrame,我想显示一个带有边框的JLabel,填充可能是50px.当我将JFrame的大小设置为750,750,并将JLabel的大小设置为650,650并将位置设置为50,50时,它显示它很奇怪...这是我的代码:
public class GUI {
/**
* Declarate all
*/
public int height = 750;
public int width = 750;
Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
int x = (screen.width / 2) - (width / 2); // Center horizontally.
int y = (screen.height / 2) - (height / 2); // Center vertically.
/**
* Create the GUI
*/
JFrame frame = new JFrame();
Border border = LineBorder.createBlackLineBorder();
JLabel label = new JLabel();
public GUI(){
label.setBorder(border);
label.setSize(700, 700);
label.setLocation(0, 0);
frame.getContentPane().setLayout(null);
frame.add(label);
} …Run Code Online (Sandbox Code Playgroud) 我试图让我的JTextField填充宽度并为其设置高度但仍然失败.我尝试添加代码setPreferredSize(new Dimension(320,200));但仍然失败.有什么方法可以让我的JTextField填充宽度并将高度设置为200或其他什么?
我想实现以下目标:
+------------------Other container(s)-----------------+
| +------JScrollPane (vertical)-------+ |
| | JTextField | |
| | Box.createRigidArea (vertical) | |
| | JTextArea | |
| | { etc.. any other J-component } | |
| | | |
| | | |
| | | |
| | | |
| +-----------------------------------+ |
+-----------------------------------------------------+
Run Code Online (Sandbox Code Playgroud)
我能得到的最接近的是以下(伪)代码:
JPanel container = new JPanel(new BorderLayout());
JPanel innerContainer = new JPanel();
innerContainer.setLayout(new BoxLayout(_innerContainer, BoxLayout.Y_AXIS));
JScrollPane scrollPane = new JScrollPane(innerContainer);
container.add(scrollPane, BorderLayout.NORTH);
Run Code Online (Sandbox Code Playgroud)
每当我想添加组件时,它们都会添加到内部容器中:
innerContainer.add(new JTextField());
innerContainer.add(Box.createRigidArea(new Dimension(0, …Run Code Online (Sandbox Code Playgroud) 面对使用BoxLayout的问题
在我的示例中,我尝试降低文本字段的高度并更改按钮的宽度(如图中的绿色标记所示).我知道setPrefferedSize()和setMaximumSize()技术,但它没有按预期工作.行添加(Box.createHorizontalGlue())也没有帮助.
谢谢你的想法
public class Testy extends JPanel {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
constructGUI();
}
});
}
private static void constructGUI() {
JFrame frame = new JFrame("Testy");
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
JPanel centerPanel = new JPanel();
centerPanel.setBackground(Color.DARK_GRAY);
centerPanel.setPreferredSize(new Dimension(100, 400));
frame.add(centerPanel, BorderLayout.CENTER);
Testy eastPanel = new Testy();
frame.add(eastPanel, BorderLayout.EAST);
frame.pack();
frame.setVisible(true);
}
public Testy() {
setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
JButton button = new JButton("Button ...... 1");
//button.setPreferredSize(...);
//button.setMaximumSize(...);
add(button);
button = new JButton("Button 2"); …Run Code Online (Sandbox Code Playgroud) JTextField当Frame最大化时,如何获得固定高度?我希望它看起来与Ubuntu上的Skype应用程序类似.
private JTextField username;
private JPasswordField password;
private JLabel usernamelabel;
private JLabel passwordlabel;
public LoginPanel(){
setSize(200,200);
setLayout(new GridLayout(4,4));
setBackground(new Color(85,153,187));
setBorder(BorderFactory.createEmptyBorder(70, 70, 70, 70));
username = new JTextField();
password = new JPasswordField();
usernamelabel= new JLabel("Username");
passwordlabel= new JLabel("Password");
username.setBounds(5, 5, 100, 100);
username.setPreferredSize(new Dimension(80,20));
password.setPreferredSize(new Dimension(80,20));
add(usernamelabel);
add(username);
add(passwordlabel);
add(password);
Run Code Online (Sandbox Code Playgroud) 我正在使用NetBeans GUI编辑器创建一个应用程序,我希望在其中有一个JSplitPane,其顶部组件将Canvas在a中JScrollPane,而底部组件将是a JTextArea或类似的东西.
当我向下拉分隔器,从而增加顶部组件的大小时,一切似乎都调整得很好.
当我试图向上推动分频器时出现问题:分频器似乎在Canvas(也可能在它下面JScrollPane)下方.
我试图首选/最小/最大的尺寸的各种组合JScrollPane和Canvas,但似乎没有任何工作.
这是Netbeans生成的代码的一部分,可能与手头的问题有关:
jSplitPane1 = new javax.swing.JSplitPane();
jScrollPane1 = new javax.swing.JScrollPane();
canvas1 = new java.awt.Canvas();
jTextField1 = new javax.swing.JTextField();
jSplitPane1.setDividerLocation(300);
jSplitPane1.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);
jScrollPane1.setViewportView(canvas1);
jSplitPane1.setTopComponent(jScrollPane1);
jTextField1.setText("jTextField1");
jSplitPane1.setRightComponent(jTextField1);
Run Code Online (Sandbox Code Playgroud)
由于这是我的第一个问题,我不允许在问题中嵌入图像,因此我将发布链接:

红色箭头表示分隔线的位置.
在此先感谢您的时间.
如果我创建不可调整大小的JFrame,并启用Windows Aero setLocation似乎没有正确考虑窗口边框.
在下面的代码中,我希望第二帧位于第一帧的右侧,而不是边框重叠.如果禁用Aero,或者我删除了setResizable对此的调用,则按预期完成.
import java.awt.Rectangle;
import javax.swing.JFrame;
public class FrameBorders {
public static void main(String[] args) {
JFrame frame1 = new JFrame("frame 1");
JFrame frame2 = new JFrame("frame 2");
frame1.setResizable(false);
frame2.setResizable(false);
frame1.setVisible(true);
Rectangle bounds = frame1.getBounds();
frame2.setLocation(bounds.x+bounds.width, bounds.y);
frame2.setVisible(true);
}
}
Run Code Online (Sandbox Code Playgroud)
我做错了什么或这是一个错误?如何在没有重叠边框的情况下并排显示2个不可调整的对话框?
编辑:添加了截图(也将frame2更改为JDialog而不是JFrame)
Aero On:

Aero Off:

Aero On但可调整大小:

我有两个JButton文本"Ok"和"Cancel".我用它GridBagLayout来对齐它们JDialog.我把锚设置为GridBagConstraints.CENTER.由于文本"Ok"和"Cancel"中字符数的不同,按钮的大小不同.如何正确对齐它们,使它们每个都具有相同的大小.我试过以下但没有用.
okayButton.setSize(cancelButton.getSize());
Run Code Online (Sandbox Code Playgroud)