- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我将 JComboBox、JRadioButton、JButton 添加到 JPanel 时,它工作正常,但是当我将它们添加到 JFrame 并执行它后,所有这些组件都消失了。我的代码如下:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Test21 {
public static void main(String[] args) {
JFrame jf = new JFrame("康樂彩歌(v0)");
jf.setBounds(0, 0, 1368, 730);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JLabel label1 = new JLabel("選歌:"); //創建標簽
label1.setFont(new Font("新細明體", Font.PLAIN, 20));
jf.add(label1);
JComboBox cmbox = new JComboBox(); //創建JComboBox
//cmb.setLocation(500,500);
cmbox.setFont(new Font("新細明體", Font.PLAIN, 30));
//cmb.setBounds(120,80,150,30);
cmbox.addItem("紫竹調");
cmbox.addItem("走一同去郊遊");
cmbox.addItem("大野狼");
cmbox.addItem("歸來吧蘇連多");
cmbox.addItem("追尋");
cmbox.addItem("三輪車");
cmbox.addItem("我家門前有小河");
cmbox.addItem("漁家樂");
cmbox.addItem("嚕啦啦");
cmbox.addItem("踏雪尋梅");
jf.add(cmbox);
JRadioButton rb2 = new JRadioButton("加人聲", false);
rb2.setFont(new Font("新細明體", Font.PLAIN, 20));
jf.add(rb2);
JButton btPlay = new JButton("PLAY");
btPlay.setFont(new Font(Font.DIALOG_INPUT, Font.BOLD, 25));
jf.add(btPlay);
//JButton btStop = new JButton("STOP");
//btStop.setFont(new Font(Font.DIALOG_INPUT, Font.BOLD, 25));
Panel1 jp1 = new Panel1();//Panel1() is a class included in the same project
jp1.setBorder(BorderFactory.createLineBorder(Color.black));
jf.add(jp1);
jp1.move = false;
jp1.display();
jf.setVisible(true);
btPlay.addActionListener(new ActionListener() {//加上事件接收器-對按钮PLAY
@Override
public void actionPerformed(ActionEvent e) {//接收到事件後進行以下的處理
Thread a = new Thread()
{
public void run()
{
AudioTest1 runAudio = new AudioTest1();//AudioTest1 is a class included in
the same project.
runAudio.audioFileName = "audio1.wav";
runAudio.AudioPlay();
}
};
Thread b = new Thread()
{
public void run()
{
jp1.move = true;
jp1.display();
}
};
a.start();
b.start();
}
});
}
}
最初,我将这些组件作为 jp1.add(cmbox)、jp1.add(rb2)、jp1.add(btPlay) 添加到 JPanel,而不是 jf.add(cmbox)、jf.add(rb2)、jf。添加(btPlay)它工作正常。下面列出了Panel1.java:
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JButton;
import javax.swing.JPanel;
class Panel1 extends JPanel{
int x[] = new int[59]; //the x position of each note
int y[] = new int[59]; //the y position of each note
int width[] = new int[59]; //the width of each note
int height = 20; //the height of each note
Color color[] = new Color[59];//the color of each note
Boolean move;
JButton btStop = new JButton("STOP");
//btStop.setFont(new Font(Font.DIALOG_INPUT, Font.BOLD, 25));
String[] lyric = {"一", " 根", "紫~", "竹", "直~", "苗~", "苗,", "送", "給", "寶", "寶", "做", "管", "簫,",
"簫", "兒", "對", "準", "口,", "口", "兒", "對", "準", "簫,",
"簫~", "中", "吹~", "出", "新~", "時~ ", "調,",
"小", "寶~", "寶,", "小", "寶~", "寶,",
"咿", "底", "咿", "底", "學 ", "會", "了,", "啊 ~ ~ ~"};//共45個
int[] numNotes = {1, 1, 2, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2, 1, 2, 1, 2, 2, 1,
1, 2, 1, 1, 2, 1,
1, 1, 1, 1, 1, 1, 1, 6};//共45個
int[][] notes = {{5,2},{8,2},{6,1},{5,1},{3,2},{5,1},{2,1},{3,1},{2,1},{1,4},{6,1},{8,1},
{3,1},{5,1},{6,2},{3,2},{5,8},{8,1},{6,1},{3,1},{6,1},{5,4},{6,1},{8,1},
{3,1},{6,1},{5,4},{5,1},{6,1},{8,2},{6,1},{5,1},{3,2},{5,1},{2,1},{3,1},
{2,1},{1,4},{1,2},{1,1},{3,1},{2,4},{1,2},{1,1},{3,1},{2,4},{6,1},{8,1},
{6,1},{8,1},{9,2},{6,2},{5,3},{6,1},{2,1},{3,1},{5,1},{6,1},{5,8}};//共59個
String[] simplifiedNote = {"| 5", " 1", " 6", "5", "3", "| 5", "2", "3", "2", "1 - ", "| 6", "1",
"3", "5", "6", " 3", "| 5 - - -", "| 1", "6", "3", "6", "5 - ", "| 6", "5",
"3", "6", "5 -", "| 5", "6", "1", "6", "5", " 3", "| 5", "2", "3",
"2", "1 -", "| 1", "1", "3", "2 -", "| 1", "1", "3", "2 -", "| 6", "1",
"6", "1", "2", "6", "| 5 .", "6", "2", "3", "5", "6", "| 5 - - - "};//共59個
Color color0 = new Color(255,255,255); //白色
Color color1 = new Color(255,0,0); //紅色
Color color2 = new Color(255,165,0); //橙色
Color color3 = new Color(255,255,0); //黃色
Color color4 = new Color(0,128,0); //綠色
Color color5 = new Color(0,0,255); //藍色
Color color6 = new Color(75,0,130); //靛色
Color color7 = new Color(100,0,153); //紫色
Color color8 = new Color(153,0,0); //暗紅
Color color9 = new Color(0,0,0); //黑色
Color color10 = new Color(37,255,255); //淺藍
public void display(){
for (int i = 0;i < notes.length; i++) {
//System.out.println("notes[" + i + "][0] = " + notes[i][0]);
switch (notes[i][0]) {
case 1:
y[i] = 400;
color[i] = color1;
break;
case 2:
y[i] = 400 - 20;
color[i] = color2;
break;
case 3:
y[i] = 400 - 20*2;
color[i] = color3;
break;
case 4:
y[i] = 400 - 20*3;
color[i] = color4;
break;
case 5:
y[i] = 400 - 20*4;
color[i] = color5;
break;
case 6:
y[i] = 400 - 20*5;
color[i] = color6;
break;
case 7:
y[i] = 400 - 20*6;
color[i] = color7;
break;
case 8:
y[i] = 400 - 20*7;
color[i] = color1;
break;
case 9:
y[i] = 400 - 20*8;
color[i] = color2;
}
switch (notes[i][1]) {
case 1: width[i] = 20;
break;
case 2: width[i] = 20 * 2;
break;
case 3: width[i] = 20 * 3;
break;
case 4: width[i] = 20 * 4;
break;
case 5: width[i] = 20 * 5;
break;
case 6: width[i] = 20 * 6;
break;
case 7: width[i] = 20 * 7;
break;
case 8: width[i] = 20 * 8;
}
}
x[0] = 100;
for (int i = 1; i < notes.length; i++){
x[i] = x[i-1] + width[i-1];
}
int timeLast = 0; //total executing time
if (move == true) {
while(timeLast < 900){
for (int i = 0; i < notes.length; i ++){
x[i]--;
}
this.repaint();
try {Thread.sleep(50);}
catch (InterruptedException e){
e.printStackTrace();
}
timeLast = timeLast + 1;
}
}
}
public void paint(Graphics g){
super.paint(g);
Graphics2D g2d = (Graphics2D)g;
g2d.setColor(color9);
g2d.setFont(new Font("新細明體", Font.BOLD, 20));
int y1 = 130; //C調 4/4 Y坐標
int y2 = 180; //簡譜行Y坐標
int y3 = 210; //歌詞行Y坐標
int y4 = 163; //加高音點
int y5 = 180; //加八分音符底線
int y6 = 470; //色彩音符說明
int chrPosition = 0;
g2d.drawString("C調 4/4", 16, y1);
//色彩音符說明
g2d.drawString("色彩音符:", 16, y6);
g2d.setColor(color1);
g2d.fillRoundRect(126, y6-16, 20,20, 3,3);
g2d.setColor(color9);
g2d.drawString(": Do", 150, y6);//126 + 24
g2d.setColor(color2);
g2d.fillRoundRect(206, y6-16, 20,20, 3,3);//150 + 56
g2d.setColor(color9);
g2d.drawString(": Re", 230, y6);//206 + 24
g2d.setColor(color3);
g2d.fillRoundRect(286, y6-16, 20,20, 3,3);//230 + 56
g2d.setColor(color9);
g2d.drawString(": Mi", 310, y6);//286 + 24
g2d.setColor(color4);
g2d.fillRoundRect(366, y6-16, 20,20, 3,3);//310 + 56
g2d.setColor(color9);
g2d.drawString(": Fa",390, y6);//366 + 24
g2d.setColor(color5);
g2d.fillRoundRect(446, y6-16, 20,20, 3,3);//390 + 56
g2d.setColor(color9);
g2d.drawString(": So", 470, y6);//446 + 24
g2d.setColor(color6);
g2d.fillRoundRect(526, y6-16, 20,20, 3,3);//470 + 56
g2d.setColor(color9);
g2d.drawString(": La", 550, y6);//526 + 24
//g2d.setColor(color7);
//g2d.fillRoundRect(606, y6-16, 20,20, 3,3);//550 + 56
//g2d.setColor(color9);
//g2d.drawString(":Si", 630, y6);//606 + 24
//寫出簡譜
for (int i = 0;i < simplifiedNote.length; i++){
g2d.drawString(simplifiedNote[i], x[i], y2);
}
//在簡譜下方寫出歌詞
g2d.setColor(color9);
for (int i = 0; i < lyric.length; i++){
if (i != 0 && numNotes[i-1] == 2) {
chrPosition = chrPosition + 1;
g2d.drawString(lyric[i], x[chrPosition], y3);
}
else {
g2d.drawString(lyric[i], x[chrPosition], y3);
}
chrPosition = chrPosition + 1;
}
//在簡譜上方加高音點
g2d.setColor(color9);
g2d.drawString(".", x[1]+14, y4);
g2d.drawString(".", x[11]+2, y4);
g2d.drawString(".", x[17]+11, y4);
//g2d.drawString(".", x[23]+2, y4);
g2d.drawString(".", x[29]+2, y4);
g2d.drawString(".", x[47]+2, y4);
g2d.drawString(".", x[49]+2, y4);
g2d.drawString(".", x[50]+2, y4);
//在簡譜下方加八分音符底線
g2d.setColor(color9);
g2d.drawString("_", x[2]+4, y5);
g2d.drawString("_", x[3], y5);
g2d.drawString("_", x[5]+8, y5);
g2d.drawString("_", x[6], y5);
g2d.drawString("_", x[7], y5);//5
g2d.drawString("_", x[8], y5);
g2d.drawString("_", x[10]+8, y5);
g2d.drawString("_", x[11], y5);
g2d.drawString("_", x[12], y5);
g2d.drawString("_", x[13], y5);//10
g2d.drawString("_", x[17]+8, y5);
g2d.drawString("_", x[18], y5);
g2d.drawString("_", x[19], y5);
g2d.drawString("_", x[20], y5);
g2d.drawString("_", x[22]+8, y5);//15
g2d.drawString("_", x[23], y5);
g2d.drawString("_", x[24], y5);
g2d.drawString("_", x[25], y5);
g2d.drawString("_", x[27]+8, y5);
g2d.drawString("_", x[28], y5);//20
g2d.drawString("_", x[30], y5);
g2d.drawString("_", x[31], y5);
g2d.drawString("_", x[33]+8, y5);
g2d.drawString("_", x[34], y5);
g2d.drawString("_", x[35], y5);
g2d.drawString("_", x[36], y5);//25
g2d.drawString("_", x[39], y5);
g2d.drawString("_", x[40], y5);
g2d.drawString("_", x[43], y5);//1
g2d.drawString("_", x[44], y5);//3
g2d.drawString("_", x[46]+8, y5);//6
g2d.drawString("_", x[47], y5);//1
g2d.drawString("_", x[48], y5);//6
g2d.drawString("_", x[49], y5);//1
g2d.drawString("_", x[53], y5);//6
g2d.drawString("_", x[54], y5);//2
g2d.drawString("_", x[55], y5);//3
g2d.drawString("_", x[56], y5);//5
g2d.drawString("_", x[57], y5);//6
//在歌詞下方繪出彩色譜
for (int i = 0;i < notes.length; i++){
g2d.setColor(color[i]);
g2d.fillRoundRect(x[i], y[i], width[i], height, 3,3); //畫圓角方塊
g2d.setColor(color8);
g2d.drawLine(x[i],230, x[i]+width[i], 230);//畫水平上線
g2d.setColor(color8);
g2d.drawLine(x[i],231, x[i], 429);//畫直紅線
g2d.setColor(color8);
g2d.drawLine(x[i],430, x[i]+width[i], 430);//畫水平下線
}
g2d.setColor(color8);
g2d.drawLine(x[notes.length-1]+ width[notes.length - 1],231, x[notes.length - 1] + width[notes.length - 1],429);//畫邊界直紅線
}
}
AudioTest1.java 列出如下:
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
class AudioTest1 {//to play the music
String audioFileName;
public void AudioPlay() {
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
try{
Clip clip = AudioSystem.getClip();
AudioInputStream inputStream = AudioSystem.getAudioInputStream(classLoader.getResourceAsStream(audioFileName));
clip.open(inputStream);
clip.start();
while (!clip.isRunning())
Thread.sleep(0);
while (clip.isRunning())
Thread.sleep(0);
clip.close();
} catch (Exception e)
{
e.printStackTrace();
System.out.println(e);
}
}
}
我的目标是列出 JComboBox 中的所有歌曲,让用户选择一首歌曲并查看分数。单击“播放”按钮时,乐谱开始移动,同时播放音乐。
最佳答案
这是因为默认情况下 JPanel
使用 FlowLayout
显示了一个接一个添加的组件
JFrame
使用 BorderLayout
其中最多可放置 5 个组件(PAGE_START、PAGE_END、LINE_START、LINE_END、CENTER 区域各一个)。如果您不指定区域,则组件将被放置到 CENTER 区域中。如果您尝试将多个组件放入一个区域,最后一个组件将会显示。
对于您的问题,我建议创建一个 JPanel
,其中包含您的 JLabel
、JComboBox
、JRadioButton
和JButton
并将 JPanel
添加到 JFrame
中,如下所示:
JPanel buttonPanel = new JPanel();
buttonPanel.add(label1); // instead of jf.add(label1);
buttonPanel.add(cmbox); // instead of jf.add(cmbox);
buttonPanel.add(rb2); // instead of jf.add(rb2);
buttonPanel.add(btPlay); // instead of jf.add(btPlay);
jf.add(buttonPanel, BorderLayout.PAGE_START);
<小时/>
如果你这样做了,为什么你的组件不显示
jf.setLayout(null);
jp1.setBounds(0, 100, 1368, 730);
这很简单:如果您想通过编写jf.setLayout(null);
来使用绝对定位,您必须自己定义每个组件的边界。
而且这不能很好地扩展:这是一项乏味的任务,如果人们有不同的字体大小设置,你几乎肯定会让某人不高兴。
最好了解各种布局管理器如何工作并正确使用它们。要了解布局管理器,您可以在 https://docs.oracle.com/javase/tutorial/uiswing/layout/index.html 找到重要文档。
关于java - 为什么在我将组件添加到 JFrame 而不是将它们添加到 JPanel 后,所有这些组件都消失了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60861243/
我使用 vanilla JS 通过 AJAX 向数据库发送请求。数据写入数据库没有问题。在刷新页面之前,我看不到被放入数据库中的内容。当我删除内容时也会发生同样的情况,我必须刷新才能看到内容消失了。
抱歉,这篇文章很长,我试图提供所有信息并解释我已经尝试过的内容。 问题: 我将经典的 Phoenix View 放入实时 View 中。虽然一切看起来都很好,但 echart 一完成绘制就消失了。好像
搜索了一下,没有找到我要找的东西。我有两个按钮,单击一次即可拉出两个不同的选择框,第二次单击它们就会消失。但是,我希望选择框 1 在单击按钮 2 时消失,反之亦然:选择框 2 将在单击按钮 1 时消失
我正在尝试使用自动布局使用“浮动”标题构建滚动视图。更确切地说,我正在尝试建立包含几列的日历视图。这些列中的每个列都应具有自己的标题,该标题应浮动在顶部,而该列可以垂直滚动到其下方。 如果一切正常,则
我正在尝试模仿星星背景。 星星是在加载时创建并随机散布在整个网站上的。到目前为止我已经调整了一些代码。 var star="•"; var numStars=100; for(var x=1;x•";
我查遍了整个网络,但找不到解决方案。我对 jQuery 也很陌生。 我的案例: 我有一个导航栏,其中的每个链接都会激活/触发一个megamenu(每个链接都有自己的megamenu)。 我需要什么:
我有一个可扩展的 ListView ,当我点击一行时,它会触发 onChildClick 或 onGroupClick,具体取决于我点击的是子项还是组。 如果我在 xml 布局文件中添加可点击的内容(
在我的程序中,我有一个 NSMutableData 变量,用于收集来自 http://www.nhara.org/scored_races-2013.htm 的信息。 .大约第三次从网站获取信息后,当
我一直在完美地使用 Genymotion,但是从最近几天开始我的 Genymotion 并打开它的 GPS 开始,我的 Genymotion 突然消失了。但是我的 eclipse 显示 Genymot
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and t
所以我的 Item::return_all() 有问题,因为我在 main.cpp 中调用它。早些时候我在 read_file() 和 for (auto data : example_item) 中
所有 UITableCells 在 UITableView 中滚动和触摸时消失。一切都以编程方式完成,我使用标准的 UITableViewCell 类。 我在某处读到包含我的单元格数据的数组可能被清空
我对 Swift 还很陌生。我的问题是我的 UICollectionView 正在消失。在 Xcode 中,它显示一切就绪,但当我在模拟器或设备上启动时,它消失了,只剩下导航栏和标签栏。 有谁知道是什
这是 this one的续题。较早的问题是在复选框上。但是后来我根据要求把check box改成了radio buttons。 现在我需要显示子单选按钮并在母单选按钮处于事件状态时更改背景颜色。一旦它
我用 JS 写了一个简单的脚本。当我将它放入 html 文档(在 body 标签的底部)时,它工作正常。当我尝试将它放入外部文档并链接它时,脚本运行但 canvas 元素消失(刚刚检查:当我将脚本放在
我正在尝试创建一个带有固定元素的滚动页面,当用户向下滚动页面时,该元素“始终”可见。例如,带有道路背景的汽车图像。因此,当用户向下滚动页面时,汽车看起来就像在路上行驶。虽然汽车出现在道路的顶部,但它必
这个问题在这里已经有了答案: How can I change CSS display none or block property using jQuery? (15 个答案) 关闭 4 年前。
我在市场上有一个支持小部件的应用程序。我对应用程序进行了一些重大更改,重新设计了很多内部结构,替换/重命名 Activity 等。其他更改包括从不同的共享首选项键获取小部件配置数据,尽管我已经编写了转
我有一个 fragment alertsfragment.java,它有一个 GridView 布局,当我打开它时,它工作正常,但是当我在其他选项卡之间滑动时,它就消失了。为了解释更多,我有一个 Ac
我是一名优秀的程序员,十分优秀!