Вы создали один элемент, а затем пытаетесь вставить его в два разных места. Вы должны сделать два элемента, а затем вставить их оба.
#addNode {
margin-left: 20px;
width: 20%;
height: 20px;
font-weight: bold;
}
#deleteNode {
margin-right: 20px;
width: 20%;
height: 20px;
font-weight: bold;
}
#txtInput {
width: 50%;
height: 10px;
float: left;
padding: 10px;
}
#srcNodes {
width: 40%;
font-family: courier new;
padding: 10px;
}
#targetNodes {
width: 40%;
font-family: courier new;
padding: 10px;
}
<textarea id="addNodeInput" placeholder="Node Name"></textarea>
<button id="addNode" onclick="addNode();">Add</button>
<button id="deleteNode" onclick="deleteNode();">Delete</button>
<div id="nodeConsole"></div>
<select id="srcNodes" size="8"> </select>
<select id="targetNodes" size="8"> </select>
<script>
var cmd = "";
var inNode = document.getElementById("addNodeInput");
var out = document.getElementById("nodeConsole");
function display() {
out.value = "Node Operations";
out.innerHTML = cmd + out.innerHTML;
cmd = "";
}
function addNode() {
var n = inNode.value;
cmd = ">>>" + n + "<br />";
//display(cmd);
inNode.value = "";
inNode.focus();
var s = document.getElementById("srcNodes");
var t = document.getElementById("targetNodes");
var option1 = document.createElement("option");
var option2 = document.createElement("option");
option1.text = n;
option2.text = n;
s.add(option1);
t.add(option2);
}
</script>
Измените метод movement
, чтобы просто обновить дельту
public void movement(){
x_position = x_position +10;
}
Удалите вызов movement
из вашего метода paintComponent
Обновите вас Timer
для вызова movement
method
Timer timer = new Timer(50, e -> {
canvas.movement();
canvas.repaint();
});
и как насчет операторов if, где, если версия исчезает с экрана, она возвращается к началу? я должен был бы сделать отдельный метод для проверки? и если так, я бы назвал это в графике или в таймере? Спасибо
blockquote>Вы продолжаете задавать этот вопрос, и вы продолжаете получать один и тот же ответ, я не уверен, что вы ожидаете изменить.
Я бы подумал использовать что-то вроде , например, , которое просто рисует «переполнение» изображения, чтобы заполнить оставшееся пространство, или , например, или даже , это пример , который использует
BufferedImage#getSubImage
, что, вероятно, более эффективно.Основываясь на первых двух примерах, вы также можете сделать что-то вроде ...
import java.awt.Color; import java.awt.Dimension; import java.awt.EventQueue; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.image.BufferedImage; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.Timer; public class Test { public static void main(String[] args) { new Test(); } public Test() { EventQueue.invokeLater(new Runnable() { @Override public void run() { BufferedImage background = new BufferedImage(800, 200, BufferedImage.TYPE_INT_RGB); Graphics2D g2d = background.createGraphics(); g2d.setColor(Color.WHITE); g2d.fillRect(0, 0, 800, 200); g2d.setColor(Color.RED); g2d.drawLine(0, 0, 800, 200); g2d.drawLine(0, 200, 800, 0); JFrame frame = new JFrame(); frame.add(new RenderPane(background)); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); } }); } public class RenderPane extends JPanel { private BufferedImage bgMaster; private BufferedImage bgImage; private Timer timer; private double delta = 1.0; private double backgroundXPos = 0; public RenderPane(BufferedImage background) { this.bgMaster = background; bgImage = new BufferedImage(getPreferredSize().width, getPreferredSize().height, bgMaster.getType()); renderBackground(); timer = new Timer(5, new ActionListener() { @Override public void actionPerformed(ActionEvent evt) { backgroundXPos -= delta; if (backgroundXPos + background.getWidth() < 0) { System.out.println("Reset"); backgroundXPos = 0; } renderBackground(); repaint(); } }); timer.start(); } protected void renderBackground() { Graphics2D g2d = bgImage.createGraphics(); g2d.drawImage(bgMaster, (int)backgroundXPos, 0, null); double overflow = bgMaster.getWidth() - (backgroundXPos * -1) - getWidth(); if (overflow < 0) { double overflowX = getWidth() + overflow; g2d.drawImage(bgMaster, (int)overflowX, 0, null); } g2d.dispose(); } @Override public Dimension getPreferredSize() { return new Dimension(400, 200); } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2d = (Graphics2D) g.create(); if (bgImage != null) { g2d.drawImage(bgImage, 0, 0, this); } g2d.dispose(); } } }