我正在尝试建立一个系统来分解(如果该术语在化学中是正确的)一个给定的扩展化学公式,例如C6H2NO2NO2NO2CH3括号,以便它C?H?(NO?)?CH?.(在第一个实例中忽略下标或缺少下标).问题是,我不知道重复的分子会是什么,甚至不知道它会持续多久.我如何找到并计算重复次数?
对于上下文,这是我到目前为止的代码,它从2D元素列表生成公式:
private String getFormula(List<List<Element>> elements)
{
String formula = ""; //TODO Switch out for StringBuilder
for(List<Element> currentElement : elements)
{
formula += currentElement.get(0).getSymbol(); //Every element per list is identical, so looking at 0 will always be safe
if(currentElement.size() > 1) formula += currentElement.size(); //Only display a number if there is more than 1 element
}
return formula;
}
Run Code Online (Sandbox Code Playgroud) 我已经完美地设置了菜单(中心框),但我不知道如何放置标签。目前发生的情况是标签位于菜单选项下方,并且菜单选项被推到右侧。
这是我想要发生的事情:

这是正在发生的事情:

目前我的盒子集中在:
this.setAlignmentX(Component.CENTER_ALIGNMENT);
Run Code Online (Sandbox Code Playgroud)
我尝试使用以下方法对我的标签执行相同的操作:
this.setAlignmentX(Component.BOTTOM_ALIGNMENT);
this.setAlignmentY(Component.LEFT_ALIGNMENT);
Run Code Online (Sandbox Code Playgroud)
这什么也没做。
抱歉,这张图太糟糕了,我用 MS Paint 花了大约 20 秒就把它画出来了。
这是标签的重要部分
public Label(String text)
{
this.setHorizontalTextPosition(JLabel.CENTER);
this.setVerticalTextPosition(JLabel.CENTER);
this.setHorizontalAlignment(0);
}
Run Code Online (Sandbox Code Playgroud)
这是我创建盒子布局的地方:
pnlMain.setLayout(new BoxLayout(pnlMain, BoxLayout.Y_AXIS));
Run Code Online (Sandbox Code Playgroud)
编辑:这是我的 JFrame 扩展类中的主要函数。功能之上只是面板、按钮和标签的创建。
public Window()
{
//Create the JFrame
super("Tank Trouble");
this.pack();
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
//Changes the frame size to your screen size
Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();
int x = (int) (dimension.getWidth());
int y = (int) (dimension.getHeight());
setSize(x,y);
setResizable(false);
//GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().setFullScreenWindow(this); //Makes the application go fullscreen
getContentPane().add(pnlMaster);
pnlMaster.add(pnlMenu, "Main Menu");
pnlMaster.add(pnlOptions, "Options");
pnlMaster.add(pnlGame, …Run Code Online (Sandbox Code Playgroud) 我目前正在用Java创建一个定制的Minecraft Server启动器,并且我已经到了早期阶段,我真的喜欢按钮来做某事.我设法得到一个按钮来响应(开始按钮),但是一旦我输入第二个if语句使停止按钮响应,之前工作的启动按钮现在没有.我无法测试停止按钮,因为它默认是禁用的.当我切换if语句(首先将stopBtn actionlistener放入)时,启动按钮再次起作用,但停止按钮不起作用.请有人看看代码并提供帮助吗?
package custommcserver;
import java.awt.GridLayout;
import java.awt.event.*;
import javax.swing.*;
class Window extends JFrame implements ActionListener
{
JPanel mainPnl = new JPanel(new GridLayout(2,1));
JPanel propPnl = new JPanel();
JButton startBtn = new JButton("Start");
JButton stopBtn = new JButton("Stop");
JButton propBtn = new JButton("Properties");
public Window()
{
super("Custom Minecraft Server Launcher") ;
setSize(500,200) ;
setDefaultCloseOperation(EXIT_ON_CLOSE) ;
add(mainPnl) ;
mainPnl.add(startBtn);
mainPnl.add(stopBtn);
mainPnl.add(propBtn);
stopBtn.setEnabled(false);
startBtn.addActionListener(this);
stopBtn.addActionListener(this);
propBtn.addActionListener(this);
setVisible(true);
}
public void actionPerformed(ActionEvent event)
{
if (event.getSource() == stopBtn);
{
stopBtn.setEnabled(false);
startBtn.setEnabled(true);
} …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个只允许数字输入的JTextField,只允许两个字符(换句话说只允许数字0-99).我查看了一些教程,并尝试将输入限制为仅限数字到目前为止.到目前为止我的代码的问题是接受所有关键输入.我试图反转大于和小于符号,它根本不再接受任何输入.我认为问题在于关键的字符代码,但是一些帮助会很好,因为我找不到任何有用的东西(我看到的每个地方都有不同的Java键盘).
if(event.getSource() == txtMasterSound)
{
if(event.getKeyCode() < 0 || event.getKeyCode() > 9)
{
System.out.println("Your input was invalid");
event.consume();
}
else
{
System.out.println("Your input was valid");
return;
}
}
Run Code Online (Sandbox Code Playgroud)
至于限制字符,我真的不知道从哪里开始,所以一些指向正确的方向也会很好.
对不起,如果我的标题有点模糊,但我想要做的是让按钮通向另一个屏幕.我正在做一个基本的游戏,所以会有几个.我目前正在尝试做的是选项屏幕.我已经找到了使用revalidate(),repaint()和多个面板执行此操作的基本方法,但每次打开另一个窗口并且看起来效率不高.
这是我的选项屏幕代码,用于处理从主菜单到自身的屏幕更改.
package menu;
import javax.swing.JFrame;
import javax.swing.JPanel;
import main.Window;
public class Options
{
JPanel pnlMain = Window.pnlMain;
JFrame frame = new main.Window();
JPanel pnlOptions = new JPanel();
public static Button graphics = new Button("Graphics");
public Options()
{
Listener listener = new Listener();
frame.add(pnlOptions);
frame.remove(pnlMain);
pnlMain.revalidate();
pnlMain.repaint();
pnlMain.setVisible(false);
pnlOptions.setVisible(true);
pnlOptions.add(graphics);
pnlOptions.revalidate();
pnlOptions.repaint();
graphics.addActionListener(listener);
}
Run Code Online (Sandbox Code Playgroud)
}
package menu;
import javax.swing.JFrame;
import javax.swing.JPanel;
import main.Window;
public class Options
{
JPanel pnlMain = Window.pnlMain;
JFrame frame = new main.Window();
JPanel pnlOptions = new …
Run Code Online (Sandbox Code Playgroud) java ×5
swing ×4
boxlayout ×1
jtextfield ×1
keycode ×1
keylistener ×1
repaint ×1
string ×1
substring ×1
window ×1