我将如何制作这款可调整大小的Chess GUI?
我们公司的任务是制作国际象棋游戏.它需要在Windows,OS X和Linux/Unix机器上工作,我们选择Java来实现这一点,同时保持一个通用的代码库(便于维护和降低成本).
我的任务是创建GUI.用户设计团队已经清除了以下规范.与客户.
国际象棋比赛(国际象棋冠军)将有力量调整大小和直接,它包括:
- 顶部的工具栏,带有UI组件:
- New 按键
- Save 按键
- Restore 按键
- Resign 按键
- 用于向玩家提供消息的标签.
在游戏的左侧,我们需要一个保留供将来使用的区域,它可能包括以下内容:
- 捕获的碎片列表
- 促销典当时选择件的选择器
- 游戏统计
- 提示等
客户和逻辑团队仍在解决这方面的细节.因此,暂时只需使用包含
?
文本的标签进行标记即可.GUI的其余部分将由棋盘本身组成.它将有:
- 国际象棋棋盘的主要区域.如果用户指向棋子,它应该显示带边框的焦点.它也应该是键盘可访问的.客户将提供多个棋子(各种尺寸,样式和颜色)的精灵表,以允许用户改变游戏的外观.
- 棋盘将有标签指示列(从左到右:A,B,C,D,E,F,G和H)和行(从上到下:8,7,6,5,4,3,2) &1).
- 国际象棋棋盘和列/行标签将以1px黑色边框为边界,周围有8px填充.
- 随着玩家增加游戏的大小,棋盘应保持正方形,否则填充可用空间.
- 国际象棋棋盘后面的背景颜色应该是赭色,但在下面的模型中,我们将棋盘背后的区域设为绿色,以突出调整大小的行为.
我有一个JPanel
看起来像这样的东西:
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
...
panel.add(jTextField1);
panel.add(Box.createVerticalStrut(10));
panel.add(jButton1);
panel.add(Box.createVerticalStrut(30));
panel.add(jTextField2);
panel.add(Box.createVerticalStrut(10));
panel.add(jButton2);
... //etc.
Run Code Online (Sandbox Code Playgroud)
我的问题是JTextField
s垂直变大.我希望它们只对单行足够高,因为这是用户可以输入的全部内容.按钮很好(它们不垂直扩展).
有没有办法阻止JTextField
s扩张?我对Swing很新,所以让我知道我是否做了一切可怕的错误.
我试图在一行上有几个JTextFields,但我不希望它们具有相同的宽度.如何控制宽度并使其中一些宽度比其他宽度宽?我希望他们一起占据总宽度的100%,所以如果我可以使用某种形状的话会很好.
我试过.setColumns()
但它没有意义.
这是一个示例,我使用三行,其中三个字符串应显示为列:
import java.awt.GridLayout;
import javax.swing.BoxLayout;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class RowTest extends JPanel {
class Row extends JComponent {
public Row(String str1, String str2, String str3) {
this.setLayout(new BoxLayout(this, BoxLayout.X_AXIS));
JTextField fld1 = new JTextField(str1);
JTextField fld2 = new JTextField(str2);
JTextField fld3 = new JTextField(str3);
fld1.setColumns(5); // makes no sense
this.add(fld1);
this.add(fld2);
this.add(fld3);
}
}
public RowTest() {
this.setLayout(new GridLayout(5,0));
this.add(new Row("Short", "A long text that takes up more space",
"Short …
Run Code Online (Sandbox Code Playgroud) 前言(这是一个自我答复的帖子)
我已经厌倦了Netbeans GUI Builder,但我只是没有开始深入了解它以了解更复杂的细节.我真的甚至不知道从设计视图更改布局管理器,我只是手工编写它.因此,我尝试通过询问"如何在Netbeans GUI Builder中使用不同的布局管理器"来询问Google服务台,并在结果的前几页中惊奇地发现了zilch.在Eclipse Window Builder中,您可以从调色板中拖放不同的布局管理器,为什么不在GUI Builder中.瞧,经过几个小时的搜索,我从容器组件的上下文菜单中找到了神奇的Set Layout.现在我准备好统治世界了!
我想我会介绍一些关于如何使用GUI Builder中不同布局管理器的教程,这里也是如此,所以其他人不会秃顶撕裂他们的头发试图找出我自己一直在想的东西.在完成第一个教程CardLayout
(下面)后,我准备发布我的努力并输入Ask Question页面的标题,"如何使用Netbeans GUI Builder使用CardLayout".什么...... !! .关于这个话题已经有一些问题!! 我想我应该让我的Google查询更精确.DOHH!
无论如何,我现在有了这个教程,它比其他答案中提供的信息更有用,所以我的努力不会浪费(所以我告诉自己:D).也许我会制作一系列这些东西.走着瞧.现在,享受如何使用CardLayout:P
我有一个来自的小组JPanel
.我有一个自定义控件派生自JLabel
.我试图将这个自定义JLabel
放在我的面板上.
我知道这样做的唯一方法就是使用一个null布局(setLayout(null)
),然后计算自定义JLabel的setLocation()
点,使它在正确的位置.
JLabel
在这个应用程序中,自定义从一个面板物理移动到此面板,我相信之前设置的位置setLocation
正在影响事物.但是,当我将其设置为(0,0)时,组件会进入左上角.
BorderLayout
不起作用,因为当只提供并放入一个组件时BorderLayout.CENTER
,中央部分会扩展以填充所有空间.
我使用的切割和从其他网站粘贴示例BoxLayout
及component.setAlignmentX(Component.CENTER_ALIGNMENT)
.这也不起作用.
另一个答案提到了覆盖小组的getInset()
功能(我认为这就是所谓的),但事实证明这是一个死胡同.
到目前为止,我正在使用带有GridBagLayout
布局的面板,GridBagConstraints
当我将自定义JLabel
插入面板时,我会包含一个对象.但这是低效的.有没有更好的方法让JLabel
我的中心JPanel
?
正如标题中所描述的那样,我一直试图设置一种带有水平滚动的垂直流布局.布局中的组件将是JLabel.让我画一幅画:
+-------------------------+ <--- window
|Label1 Label4 Label7|
|Label2 Label5 Label8| <--- labels
|Label3 Label6 Label9|
|<===============>========| <--- scrollbar
+-------------------------+
Run Code Online (Sandbox Code Playgroud)
同一窗口,垂直扩展
+--------------------------+ <--- window
|Label1 Label5 Label9 |
|Label2 Label6 Label10| <--- labels
|Label3 Label7 Label11|
|Label4 Label8 Label12|
|<===================>=====| <--- scrollbar
+--------------------------+
Run Code Online (Sandbox Code Playgroud)
因此,标签将填充可用的垂直空间,然后创建一个新列.一旦可用的水平空间耗尽,就会出现水平滚动条.
通常不应出现垂直滚动条; 但是,如果窗口的垂直高度非常小,那么有一个垂直滚动条会很不错.
任何帮助是极大的赞赏.我是Java的新手,所以任何额外的解释都会很精彩.谢谢!
编辑:
根据以下回复,我现在正在使用:http: //tips4java.wordpress.com/2008/11/06/wrap-layout/ 和 http://code.google.com/p/verticalflowlayout/
我有WrapLayout扩展VerticalFlowLayout:
package LogicSim;
import java.awt.*;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;
/**
* FlowLayout subclass that fully supports wrapping of components.
*/
public class VerticalWrapLayout extends VerticalFlowLayout …
Run Code Online (Sandbox Code Playgroud) 我怎样才能将这样的图像放到slavePanel
JPanel的顶部和顶部,调整JButtons
看起来像图像但是按钮正确缠绕?(现在它们形成一排,四列)
//
// Shot Gun mover up/down/left/right, middle on is for zoom
//
public void GunMover(JPanel configPanel) throws IOException {
// Master Panel - holds everything
JPanel masterPanel = new Panel();
masterPanel.setLayout(new SpringLayout());
// Slave Panel - with image background
JPanel slavePanel = new Panel();
slavePanel.setLayout(new SpringLayout());
// Row 1
final JButton ptzLeft = new JButton("<");
masterPanel.add(ptzLeft, BorderLayout.WEST);
// Row 2
final JButton ptzRight = new JButton(">");
masterPanel.add(ptzRight, BorderLayout.CENTER);
// Row 3
final JButton ptzUp = …
Run Code Online (Sandbox Code Playgroud) 我试图在Swing中触及MVC架构的限制,但是当我尝试所有(来自SwingWorker
或Runnable#Thread
)在EDT上完成时
我的问题:
是否有一些限制或严格依赖于实现的顺序(包装SwingWorker
或Runnable#Thread
)?
有限的是JComponent#方法线程安全吗?
Swing中MVC架构的本质特征是什么?
INC.集装箱重新布局?
注意:对于我,SSCCE
我采取了一个很好的例子HFOE
,并且可能通过严格控制这个原则是不可能创建任何EDT缺乏或GUI冻结
import java.awt.BorderLayout;
import java.awt.event.*;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.util.LinkedList;
import java.util.Queue;
import javax.swing.*;
public class MVC_ProgressBarThread {
private MVC_ProgressBarThread() {
MVC_View view = new MVC_View();
MVC_Model model = new MVC_Model();
MVC_Control control = new MVC_Control(view, model);
view.setControl(control);
JFrame frame = new JFrame("MVC_ProgressBarThread");
frame.getContentPane().add(view);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() …
Run Code Online (Sandbox Code Playgroud) 我需要将JLabel垂直放置在一些JButton上,就像游戏菜单一样.他们都应该集中.我已经下载了MigLayout,但我不确定如何使用它,所以我只想要一种方法来垂直定位我的组件并居中,MigLayout与否.另外,我不想使用IDE GUI设计器.
我想在recyclelerview中按y方向滚动一定数量的像素.我知道有像scrollToPosition()
或的方法scrollToPositionWithOffset()
.但是,那些并不符合我的需求.
我看到它LayoutManager
提供了一种方法scrollVerticallyBy(int dy, RecyclerView.Recycler recycler, RecyclerView.State state)
.这听起来像我想要的.
我该如何使用它?什么是recycler
和state
?我没有在网上找到任何例子,所以有些代码会很有用.
layout-manager ×10
java ×9
swing ×9
layout ×4
android ×1
cardlayout ×1
icons ×1
jbutton ×1
jcomponent ×1
jframe ×1
jpanel ×1
jtextfield ×1
miglayout ×1
netbeans ×1
scroll ×1